#ifndef FILESYSTEM_H
#define FILESYSTEM_H

#include <string>
#include <list>

using std::string;
using std::list;

//****************************************************************************
// class FileSystem
// abstract class for holding general file system interface
//****************************************************************************
class FileSystem
{
public:
	virtual list<string>* ListAllFilesInDirectory(string dirName) = 0;
	virtual bool MakeDirectory(string dirName) = 0;
	virtual bool NavigateUpFromCurrentDirectory(int numberOfLevels) = 0;
	virtual string GetTheCurrentDirectory() = 0;
	virtual bool SetTheCurrentDirectory(string newDir) = 0;
	virtual bool IsFileExsits(string fileName) = 0;
};

//****************************************************************************
// class WinFileSystem
// class for instantiating objects that handle file system functunality
// on windows platform.
//****************************************************************************
class WinFileSystem : public FileSystem
{
public:
	list<string>* ListAllFilesInDirectory(string dirName);
	bool MakeDirectory(string dirName);
	bool NavigateUpFromCurrentDirectory(int numberOfLevels);
	string GetTheCurrentDirectory();
	bool SetTheCurrentDirectory(string newDir);
	bool IsFileExsits(string fileName);
};

//****************************************************************************
// class OtherOsFileSystem
// class for instantiating objects that handle file system functunality
// on a non windows platform.
//****************************************************************************
class OtherOsFileSystem : public FileSystem
{
public:
	list<string>* ListAllFilesInDirectory(string dirName) 
		{throw ("not implemented"); return NULL;}
	bool MakeDirectory(string dirName) 
		{throw ("not implemented"); return false;}
	bool NavigateUpFromCurrentDirectory(int numberOfLevels)
		{throw ("not implemented"); return false;}
	string GetTheCurrentDirectory()
		{throw ("not implemented"); return "";}
	bool SetTheCurrentDirectory(string newDir)
		{throw ("not implemented"); return false;}
	bool IsFileExsits(string fileName)
		{throw ("not implemented"); return false;}
};


#endif //FILESYSTEM_H